/**
 * 
 */
package bejar;

import java.awt.Toolkit;
import com.sun.image.codec.jpeg.*;
import com.sun.media.jai.codec.JPEGEncodeParam;
//import com.sun.media.jai.codecimpl.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
//import com.sun.image.codec.jpeg.JPEGEncodeParam;

import java.awt.*;
import java.awt.image.*;
import java.io.*;


/**
 * @author bejar
 *
 */
public class Thumbnail {

	
	public static void main(String[] args) throws Exception {
		if (args.length !=5){
			System.err.println("usage: java thumbnail INFILE " + "OUTFILE WIDTH HEIGHT QUALITY");
			System.exit(1);
		}
		Image image = Toolkit.getDefaultToolkit().getImage(args[0]);
		MediaTracker mediaTraker = new MediaTracker(new Container());
		mediaTraker.addImage(image, 0);
		mediaTraker.waitForID(0);
		
		//determine thumbnail size from width and height
		
		int thumbWidth = Integer.parseInt(args[2]);
		int thumbHeight = Integer.parseInt(args[3]);
		
		double thumbRatio = (double)thumbWidth / (double)thumbHeight;
		
		int imageWidth = image.getWidth(null);
		int imageheight = image.getHeight(null);
		
		double imageRatio = (double)imageWidth / (double)imageheight;
		
		if (thumbRatio < imageRatio){
			thumbHeight = (int) (thumbWidth / imageRatio);
		}else{
			thumbWidth = (int) (thumbHeight / imageRatio);
		}
		
		//draw original image to thumbnail image object and
		// scale it to the new size on- the -fly
		
		BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
		Graphics2D graphics2D = thumbImage.createGraphics();
		graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
		
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(args[1]));
		
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		JPEGEncodeParam param = (JPEGEncodeParam) encoder.getDefaultJPEGEncodeParam(thumbImage);
		int quality = Integer.parseInt(args[4]);
		quality = Math.max(0, Math.min(quality, 100));
		param.setQuality((float)quality / 100.0f);
		encoder.setJPEGEncodeParam((com.sun.image.codec.jpeg.JPEGEncodeParam) param);
		encoder.encode(thumbImage);
		out.close();
		System.out.println("done. ");
		System.exit(0);
		
		

	}

}
